package pe.edu.upc.dew.Grupo1.web;

import java.io.IOException;

import java.util.List;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.context.support.WebApplicationContextUtils;

import pe.edu.upc.dew.Grupo1.model.Cine;
import pe.edu.upc.dew.Grupo1.model.Usuario;

import pe.edu.upc.dew.Grupo1.model.Funcion;

import pe.edu.upc.dew.Grupo1.model.Local;

import pe.edu.upc.dew.Grupo1.model.Pelicula;

import pe.edu.upc.dew.Grupo1.model.Sala;

import pe.edu.upc.dew.Grupo1.service.CineService;

import pe.edu.upc.dew.Grupo1.service.FuncionService;

import pe.edu.upc.dew.Grupo1.service.LocalService;

import pe.edu.upc.dew.Grupo1.service.PeliculaService;

import pe.edu.upc.dew.Grupo1.service.SalaService;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class MantFuncionServlet
 */
public class MantFuncionServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private SalaService salaService;
	private FuncionService funcionService;
	private PeliculaService peliculaService;

	public MantFuncionServlet() {
		super();
		// TODO Auto-generated constructor stub
	}

	@Override
	public void init(ServletConfig config) throws ServletException {

		this.salaService = WebApplicationContextUtils

		.getWebApplicationContext(config.getServletContext()).getBean(

		"salaService", SalaService.class);

		this.funcionService = WebApplicationContextUtils

		.getWebApplicationContext(config.getServletContext()).getBean(

		"funcionService", FuncionService.class);

		this.peliculaService = WebApplicationContextUtils

		.getWebApplicationContext(config.getServletContext()).getBean(

		"peliculaService", PeliculaService.class);

	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)

	throws ServletException, IOException {

		HttpSession session=req.getSession();
		if(session.getAttribute("usuario") == null)
		{
			req.getRequestDispatcher("login.jsp").forward(req,resp);	
			return;
		}
		
		String paramCodigoFuncion = req.getParameter("codigoFuncion");

		Usuario usuario=(Usuario)session.getAttribute("usuario");
		
		Local local=new Local();
		local.setCodigoLocal(usuario.getLocal().getCodigoLocal());
		
		Sala sala = new Sala();
		sala.setDescripcion("");
		sala.setLocal(local);
		
		List<Sala> lista = salaService.GetSalasPorCodigoLocalDescripcion(sala);
		req.setAttribute("salas", lista);

		Pelicula pelicula = new Pelicula();
		pelicula.setNombre("");		
		
		List<Pelicula> lista2 = peliculaService.GetPeliculasPorRazonSocial(pelicula);
		req.setAttribute("peliculas", lista2);		
		
		if (paramCodigoFuncion != null && !paramCodigoFuncion.equals(""))
		{
			int codigoFuncion = Integer.parseInt(paramCodigoFuncion);

			Funcion funcionParam = new Funcion();

			funcionParam.setCodigoFuncion(codigoFuncion);

			Funcion funcion = funcionService.GetFuncionPorCodigo(funcionParam);

			req.setAttribute("funcion", funcion);

		}

		req.getRequestDispatcher("mant_fun.jsp").forward(req, resp);

	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)	throws ServletException, IOException {
		
		HttpSession session=req.getSession();
		if(session.getAttribute("usuario") == null)
		{
			req.getRequestDispatcher("login.jsp").forward(req,resp);	
			return;
		}
		
		try {
			
			String codigoFuncion = req.getParameter("codigo");

			int horario = Integer.parseInt(req.getParameter("horario"));

			boolean estado=false;
			
			if(req.getParameter("estado")!= null && req.getParameter("estado").equals("on"))
			{
				estado=true;
			}

			int codigoSala = Integer.parseInt(req.getParameter("sala"));

			int codigoPelicula = Integer.parseInt(req.getParameter("pelicula"));

			Sala sala = new Sala();

			sala.setCodigoSala(codigoSala);

			Pelicula pelicula = new Pelicula();

			pelicula.setCodigoPelicula(codigoPelicula);

			Funcion funcion = new Funcion();

			funcion.setHorario(horario);

			funcion.setEstado(estado);

			funcion.setSala(sala);

			funcion.setPelicula(pelicula);

			int codigo = 0;

			if (codigoFuncion == null || codigoFuncion.equals(""))
			{
				codigo = funcionService.GetConteoFunciones() + 1;
				funcion.setCodigoFuncion(codigo);
				funcionService.InsertFuncion(funcion);
			}
			else {
				codigo = Integer.parseInt(codigoFuncion);
				funcion.setCodigoFuncion(codigo);
				funcionService.UpdateFuncionPorCodigo(funcion);
			}

			req.getRequestDispatcher("ListasCartelera").forward(req, resp);

		} catch (Exception e) {

			System.out.println(e.getMessage());

			req.getRequestDispatcher("error.jsp").forward(req, resp);

		}

	}
}
